/*日志消息类：
    意义：中间存储一条日志消息所需的各项要素
    1、日志的输出时间：用于过滤日志输出时间
    2、日志等级：用于进行日志过滤分析
    3、源文件名称
    4、源代码行号：用于定义出现错误的代码位置
    5、线程ID：用于过滤出错的线程
    6、日志主体消息
    7、日志器名称   （当前支持多日志器的同时使用）
*/

/*
    定义日志消息类，进行日志中间信息的存储：
    1、日志的输出时间：用于过滤日志输出时间
    2、日志等级：用于进行日志过滤分析
    3、源文件名称：
    4、源代码行号：用于定义出现错误的代码位置
    5、线程ID：用于过滤出错的线程
    6、日志主体消息
    7、日志器名称   （当前支持多日志器的同时使用）
    [2003-08-16 12:38:26][root][12345678][main.c:99][FATAL] 创建套接字失败...
*/
#ifndef __M_MSG_H__
#define __M_MSG_H__
#include <iostream>
#include <string>
#include <thread>
#include "level.hpp"
#include "util.hpp"

namespace bitlog
{
    struct LogMsg
    { // 直接访问，默认是公有的

        time_t _ctime;          // 日志产生的时间戳
        LogLevel::value _level; // 日志等级
        size_t _line;           // 行号
        std::thread::id _tid;   // 线程ID
        std::string _file;      // 源码文件名
        std::string _logger;    // 日志器名称
        std::string _payload;   // 有效消息数据

        LogMsg(LogLevel::value level,
               size_t line,
               const std::string file,
               const std::string logger,
               const std::string msg) : _level(level),
                                        _ctime(util::Date::now()),
                                        _line(line),
                                        _tid(std::this_thread::get_id()),
                                        _file(file),
                                        _logger(logger),
                                        _payload(msg)
        {
        }
    };
}
#endif